grammar simple_expression_ast;

options {
	output = AST;
}

tokens {
	PROG;
	STAT;
}

prog:   stat+ ;
                
stat:   expr NEWLINE -> ^(STAT expr)
    |   NEWLINE!
    ;

expr :   multExpr ( '+'^ multExpr | '-'^ multExpr )* 
    ;

multExpr :	 atom ('*'^ atom | '/'^ atom )*
    ;

atom :  INT -> ^(INT) 
    |   '(' expr ')' -> ^(expr)
    ;

INT :   '0'..'9'+ ;
NEWLINE:'\r'? '\n' ;
WS  :   (' '|'\t')+ {skip();} ;
